{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<diskcache.core.Cache at 0x1e2d6458a70>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pybroker\n",
    "from pybroker import Strategy, StrategyConfig, YFinance\n",
    "from pybroker.ext.data import AKShare\n",
    "pybroker.enable_data_source_cache('my_strategy')#使用数据源缓存来确保在运行回测时只下载一次所需的数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 配置选项\n",
    "StrategyConfig\n",
    "\n",
    "Strategy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#设置一个新的 Strategy 类实例，它将用于对我们的交易策略进行回测。\n",
    "# https://www.pybroker.com/en/latest/reference/pybroker.config.html#pybroker.config.StrategyConfig\n",
    "config = StrategyConfig(initial_cash=500_000)#创建一个 StrategyConfig 对象来配置策略。初始资金设为 500,000："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "'''\n",
    "通过传入以下参数来创建一个 Strategy 类的新实例：\n",
    "数据源：    在这种情况下，我们使用 Yahoo Finance 作为数据源。\n",
    "开始日期：  这是回测的开始日期。\n",
    "结束日期：  这是回测的结束日期。\n",
    "之前创建的配置对象。\n",
    "'''\n",
    "strategy = Strategy(AKShare(), '3/1/2022', '6/5/2024', config)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 定义策略规则\n",
    "规则：\n",
    "\n",
    "如果最后收盘价低于前一根K线的最低价，并且该股票没有未平仓的多头头寸，则购买该股票的股份。\n",
    "\n",
    "将买单的限价设置为比最后收盘价低 0.01 的价格。\n",
    "\n",
    "持有头寸 3 天后以市价平仓。\n",
    "\n",
    "为每只股票分配最多 25% 的投资组合。\n",
    "\n",
    "为实现这一目标，你将定义一个 buy_low 函数，PyBroker 将在每条数据的每个K线上分别为 每个股票调用该函数。每个 K 线对应一天的数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "'''\n",
    "buy_low 函数将接收一个包含当前股票代码（AAPL 或 MSFT）数据的 ExecContext （ctx）。\n",
    "ExecContext 将包含当前股票代码最近 K 线之前的所有收盘价。通过 ctx.close[-1] 获取最新的收盘价。\n",
    "'''\n",
    "def buy_low(ctx):\n",
    "    # If shares were already purchased and are currently being held, then return.\n",
    "    if ctx.long_pos():\n",
    "        return\n",
    "    # If the latest close price is less than the previous day's low price,\n",
    "    # then place a buy order.\n",
    "    if ctx.bars >= 2 and ctx.close[-1] < ctx.low[-2]:\n",
    "        # Buy a number of shares that is equal to 25% the portfolio.\n",
    "        ctx.buy_shares = ctx.calc_target_shares(0.25)#购买的股份数量,购买的股份数量将等于投资组合的 25%。\n",
    "        # Set the limit price of the order.\n",
    "        # 订单的限价通过设置。如果满足条件，买单将在下一根 K 线成交。\n",
    "        ctx.buy_limit_price = ctx.close[-1] - 0.01\n",
    "        # Hold the position for 3 bars before liquidating (in this case, 3 days).\n",
    "        # 指定在平仓之前持有头寸的 K 线数。平仓时，股票以市价出售，\n",
    "        ctx.hold_bars = 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "strategy.add_execution(buy_low, ['000001', '000002'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 添加第二个执行逻辑\n",
    "在同一个 Strategy 实例中，你可以为不同的股票代码使用不同的交易规则。换句话说，你并不局限于对一组股票代码只使用一套交易规则。\n",
    "\n",
    "为了说明这一点，提供了一个名为 short_high 的函数，其中包含一个做空策略的新规则集，这与之前的规则集类似："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 空头策略规则\n",
    "def short_high(ctx):\n",
    "    # If shares were already shorted then return.\n",
    "    if ctx.short_pos():\n",
    "        return\n",
    "    # If the latest close price is more than the previous day's high price,\n",
    "    # then place a sell order.\n",
    "    if ctx.bars >= 2 and ctx.close[-1] > ctx.high[-2]:\n",
    "        # Short 100 shares.\n",
    "        ctx.sell_shares = 100\n",
    "        # Cover the shares after 2 bars (in this case, 2 days).\n",
    "        ctx.hold_bars = 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#short_high 中的规则将应用于 TSLA：\n",
    "strategy.add_execution(short_high, ['000003'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 运行回测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Backtesting: 2022-03-01 00:00:00 to 2024-06-05 00:00:00\n",
      "\n",
      "Loading bar data...\n",
      "Loaded bar data: 0:00:02 \n",
      "\n",
      "Test split: 2022-03-01 00:00:00 to 2024-06-05 00:00:00\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  0% (0 of 550) |                        | Elapsed Time: 0:00:00 ETA:  --:--:--\n",
      "  2% (11 of 550) |                       | Elapsed Time: 0:00:00 ETA:   0:00:02\n",
      " 11% (61 of 550) |##                     | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 20% (111 of 550) |####                  | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 29% (161 of 550) |######                | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 32% (181 of 550) |#######               | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 43% (241 of 550) |#########             | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 45% (251 of 550) |##########            | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 51% (281 of 550) |###########           | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 56% (311 of 550) |############          | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 63% (351 of 550) |##############        | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 67% (371 of 550) |##############        | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 71% (391 of 550) |###############       | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 74% (411 of 550) |################      | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 80% (441 of 550) |#################     | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 85% (471 of 550) |##################    | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 91% (501 of 550) |####################  | Elapsed Time: 0:00:01 ETA:   0:00:00\n",
      " 94% (521 of 550) |####################  | Elapsed Time: 0:00:01 ETA:   0:00:00\n",
      "100% (550 of 550) |######################| Elapsed Time: 0:00:01 Time:  0:00:01\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Finished backtest: 0:00:18\n"
     ]
    }
   ],
   "source": [
    "result = strategy.backtest()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1e2d8bb0380>]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "chart = plt.subplot2grid((3, 2), (0, 0), rowspan=3, colspan=2)\n",
    "chart.plot(result.portfolio.index, result.portfolio['market_value'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>long_shares</th>\n",
       "      <th>short_shares</th>\n",
       "      <th>close</th>\n",
       "      <th>equity</th>\n",
       "      <th>market_value</th>\n",
       "      <th>margin</th>\n",
       "      <th>unrealized_pnl</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>symbol</th>\n",
       "      <th>date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>000002</th>\n",
       "      <th>2022-03-07</th>\n",
       "      <td>6680</td>\n",
       "      <td>0</td>\n",
       "      <td>18.54</td>\n",
       "      <td>123847.20</td>\n",
       "      <td>123847.20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-467.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000001</th>\n",
       "      <th>2022-03-07</th>\n",
       "      <td>8153</td>\n",
       "      <td>0</td>\n",
       "      <td>14.72</td>\n",
       "      <td>120012.16</td>\n",
       "      <td>120012.16</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1630.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000002</th>\n",
       "      <th>2022-03-08</th>\n",
       "      <td>6680</td>\n",
       "      <td>0</td>\n",
       "      <td>17.67</td>\n",
       "      <td>118035.60</td>\n",
       "      <td>118035.60</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-6279.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000001</th>\n",
       "      <th>2022-03-08</th>\n",
       "      <td>8153</td>\n",
       "      <td>0</td>\n",
       "      <td>14.31</td>\n",
       "      <td>116669.43</td>\n",
       "      <td>116669.43</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4973.33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"4\" valign=\"top\">000002</th>\n",
       "      <th>2022-03-09</th>\n",
       "      <td>6680</td>\n",
       "      <td>0</td>\n",
       "      <td>16.98</td>\n",
       "      <td>113426.40</td>\n",
       "      <td>113426.40</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-10888.40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2024-05-28</th>\n",
       "      <td>11338</td>\n",
       "      <td>0</td>\n",
       "      <td>8.52</td>\n",
       "      <td>96599.76</td>\n",
       "      <td>96599.76</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-2947.88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2024-05-29</th>\n",
       "      <td>11338</td>\n",
       "      <td>0</td>\n",
       "      <td>8.58</td>\n",
       "      <td>97280.04</td>\n",
       "      <td>97280.04</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-2267.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">000001</th>\n",
       "      <th>2024-05-30</th>\n",
       "      <td>9002</td>\n",
       "      <td>0</td>\n",
       "      <td>11.12</td>\n",
       "      <td>100102.24</td>\n",
       "      <td>100102.24</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-720.16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2024-05-31</th>\n",
       "      <td>9002</td>\n",
       "      <td>0</td>\n",
       "      <td>11.11</td>\n",
       "      <td>100012.22</td>\n",
       "      <td>100012.22</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-810.18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2024-06-03</th>\n",
       "      <td>9002</td>\n",
       "      <td>0</td>\n",
       "      <td>10.98</td>\n",
       "      <td>98841.96</td>\n",
       "      <td>98841.96</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1980.44</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>300 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                   long_shares  short_shares  close     equity  market_value  \\\n",
       "symbol date                                                                    \n",
       "000002 2022-03-07         6680             0  18.54  123847.20     123847.20   \n",
       "000001 2022-03-07         8153             0  14.72  120012.16     120012.16   \n",
       "000002 2022-03-08         6680             0  17.67  118035.60     118035.60   \n",
       "000001 2022-03-08         8153             0  14.31  116669.43     116669.43   \n",
       "000002 2022-03-09         6680             0  16.98  113426.40     113426.40   \n",
       "...                        ...           ...    ...        ...           ...   \n",
       "       2024-05-28        11338             0   8.52   96599.76      96599.76   \n",
       "       2024-05-29        11338             0   8.58   97280.04      97280.04   \n",
       "000001 2024-05-30         9002             0  11.12  100102.24     100102.24   \n",
       "       2024-05-31         9002             0  11.11  100012.22     100012.22   \n",
       "       2024-06-03         9002             0  10.98   98841.96      98841.96   \n",
       "\n",
       "                   margin  unrealized_pnl  \n",
       "symbol date                                \n",
       "000002 2022-03-07     0.0         -467.60  \n",
       "000001 2022-03-07     0.0        -1630.60  \n",
       "000002 2022-03-08     0.0        -6279.20  \n",
       "000001 2022-03-08     0.0        -4973.33  \n",
       "000002 2022-03-09     0.0       -10888.40  \n",
       "...                   ...             ...  \n",
       "       2024-05-28     0.0        -2947.88  \n",
       "       2024-05-29     0.0        -2267.60  \n",
       "000001 2024-05-30     0.0         -720.16  \n",
       "       2024-05-31     0.0         -810.18  \n",
       "       2024-06-03     0.0        -1980.44  \n",
       "\n",
       "[300 rows x 7 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#访问每个持有头寸的每日余额、每次进出场的交易以及下达的所有订单：\n",
    "result.positions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>type</th>\n",
       "      <th>symbol</th>\n",
       "      <th>entry_date</th>\n",
       "      <th>exit_date</th>\n",
       "      <th>entry</th>\n",
       "      <th>exit</th>\n",
       "      <th>shares</th>\n",
       "      <th>pnl</th>\n",
       "      <th>return_pct</th>\n",
       "      <th>agg_pnl</th>\n",
       "      <th>bars</th>\n",
       "      <th>pnl_per_bar</th>\n",
       "      <th>stop</th>\n",
       "      <th>mae</th>\n",
       "      <th>mfe</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>long</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-03-07</td>\n",
       "      <td>2022-03-10</td>\n",
       "      <td>14.92</td>\n",
       "      <td>14.42</td>\n",
       "      <td>8153</td>\n",
       "      <td>-4076.50</td>\n",
       "      <td>-3.35</td>\n",
       "      <td>-4076.50</td>\n",
       "      <td>3</td>\n",
       "      <td>-1358.83</td>\n",
       "      <td>bar</td>\n",
       "      <td>-1.70</td>\n",
       "      <td>0.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>long</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-03-07</td>\n",
       "      <td>2022-03-10</td>\n",
       "      <td>18.61</td>\n",
       "      <td>17.00</td>\n",
       "      <td>6680</td>\n",
       "      <td>-10754.80</td>\n",
       "      <td>-8.65</td>\n",
       "      <td>-14831.30</td>\n",
       "      <td>3</td>\n",
       "      <td>-3584.93</td>\n",
       "      <td>bar</td>\n",
       "      <td>-2.56</td>\n",
       "      <td>0.29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>long</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-03-14</td>\n",
       "      <td>2022-03-17</td>\n",
       "      <td>16.49</td>\n",
       "      <td>16.58</td>\n",
       "      <td>7284</td>\n",
       "      <td>655.56</td>\n",
       "      <td>0.55</td>\n",
       "      <td>-14175.74</td>\n",
       "      <td>3</td>\n",
       "      <td>218.52</td>\n",
       "      <td>bar</td>\n",
       "      <td>-2.06</td>\n",
       "      <td>0.46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>long</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-04-12</td>\n",
       "      <td>2022-04-15</td>\n",
       "      <td>15.96</td>\n",
       "      <td>16.20</td>\n",
       "      <td>7567</td>\n",
       "      <td>1816.08</td>\n",
       "      <td>1.50</td>\n",
       "      <td>-12359.66</td>\n",
       "      <td>3</td>\n",
       "      <td>605.36</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.30</td>\n",
       "      <td>0.30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>long</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-04-19</td>\n",
       "      <td>2022-04-22</td>\n",
       "      <td>20.19</td>\n",
       "      <td>19.55</td>\n",
       "      <td>5938</td>\n",
       "      <td>-3800.32</td>\n",
       "      <td>-3.17</td>\n",
       "      <td>-16159.98</td>\n",
       "      <td>3</td>\n",
       "      <td>-1266.77</td>\n",
       "      <td>bar</td>\n",
       "      <td>-1.00</td>\n",
       "      <td>0.51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>long</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-04-11</td>\n",
       "      <td>2024-04-16</td>\n",
       "      <td>7.41</td>\n",
       "      <td>7.08</td>\n",
       "      <td>13641</td>\n",
       "      <td>-4501.53</td>\n",
       "      <td>-4.45</td>\n",
       "      <td>-91686.64</td>\n",
       "      <td>3</td>\n",
       "      <td>-1500.51</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.41</td>\n",
       "      <td>0.10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>long</td>\n",
       "      <td>000001</td>\n",
       "      <td>2024-04-12</td>\n",
       "      <td>2024-04-17</td>\n",
       "      <td>10.15</td>\n",
       "      <td>10.42</td>\n",
       "      <td>10078</td>\n",
       "      <td>2721.06</td>\n",
       "      <td>2.66</td>\n",
       "      <td>-88965.58</td>\n",
       "      <td>3</td>\n",
       "      <td>907.02</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.11</td>\n",
       "      <td>0.27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>long</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-04-19</td>\n",
       "      <td>2024-04-24</td>\n",
       "      <td>6.76</td>\n",
       "      <td>6.54</td>\n",
       "      <td>14935</td>\n",
       "      <td>-3285.70</td>\n",
       "      <td>-3.25</td>\n",
       "      <td>-92251.28</td>\n",
       "      <td>3</td>\n",
       "      <td>-1095.23</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.22</td>\n",
       "      <td>0.09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>long</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-05-27</td>\n",
       "      <td>2024-05-30</td>\n",
       "      <td>8.78</td>\n",
       "      <td>8.37</td>\n",
       "      <td>11338</td>\n",
       "      <td>-4648.58</td>\n",
       "      <td>-4.67</td>\n",
       "      <td>-96899.86</td>\n",
       "      <td>3</td>\n",
       "      <td>-1549.53</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.41</td>\n",
       "      <td>0.21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>long</td>\n",
       "      <td>000001</td>\n",
       "      <td>2024-05-30</td>\n",
       "      <td>2024-06-04</td>\n",
       "      <td>11.20</td>\n",
       "      <td>10.98</td>\n",
       "      <td>9002</td>\n",
       "      <td>-1980.44</td>\n",
       "      <td>-1.96</td>\n",
       "      <td>-98880.30</td>\n",
       "      <td>3</td>\n",
       "      <td>-660.15</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.29</td>\n",
       "      <td>0.14</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 15 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     type  symbol entry_date  exit_date  entry   exit  shares       pnl  \\\n",
       "id                                                                        \n",
       "1    long  000001 2022-03-07 2022-03-10  14.92  14.42    8153  -4076.50   \n",
       "2    long  000002 2022-03-07 2022-03-10  18.61  17.00    6680 -10754.80   \n",
       "3    long  000002 2022-03-14 2022-03-17  16.49  16.58    7284    655.56   \n",
       "4    long  000001 2022-04-12 2022-04-15  15.96  16.20    7567   1816.08   \n",
       "5    long  000002 2022-04-19 2022-04-22  20.19  19.55    5938  -3800.32   \n",
       "..    ...     ...        ...        ...    ...    ...     ...       ...   \n",
       "96   long  000002 2024-04-11 2024-04-16   7.41   7.08   13641  -4501.53   \n",
       "97   long  000001 2024-04-12 2024-04-17  10.15  10.42   10078   2721.06   \n",
       "98   long  000002 2024-04-19 2024-04-24   6.76   6.54   14935  -3285.70   \n",
       "99   long  000002 2024-05-27 2024-05-30   8.78   8.37   11338  -4648.58   \n",
       "100  long  000001 2024-05-30 2024-06-04  11.20  10.98    9002  -1980.44   \n",
       "\n",
       "     return_pct   agg_pnl  bars  pnl_per_bar stop   mae   mfe  \n",
       "id                                                             \n",
       "1         -3.35  -4076.50     3     -1358.83  bar -1.70  0.25  \n",
       "2         -8.65 -14831.30     3     -3584.93  bar -2.56  0.29  \n",
       "3          0.55 -14175.74     3       218.52  bar -2.06  0.46  \n",
       "4          1.50 -12359.66     3       605.36  bar -0.30  0.30  \n",
       "5         -3.17 -16159.98     3     -1266.77  bar -1.00  0.51  \n",
       "..          ...       ...   ...          ...  ...   ...   ...  \n",
       "96        -4.45 -91686.64     3     -1500.51  bar -0.41  0.10  \n",
       "97         2.66 -88965.58     3       907.02  bar -0.11  0.27  \n",
       "98        -3.25 -92251.28     3     -1095.23  bar -0.22  0.09  \n",
       "99        -4.67 -96899.86     3     -1549.53  bar -0.41  0.21  \n",
       "100       -1.96 -98880.30     3      -660.15  bar -0.29  0.14  \n",
       "\n",
       "[100 rows x 15 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result.trades"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>type</th>\n",
       "      <th>symbol</th>\n",
       "      <th>date</th>\n",
       "      <th>shares</th>\n",
       "      <th>limit_price</th>\n",
       "      <th>fill_price</th>\n",
       "      <th>fees</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-03-07</td>\n",
       "      <td>8153</td>\n",
       "      <td>15.32</td>\n",
       "      <td>14.92</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-03-07</td>\n",
       "      <td>6680</td>\n",
       "      <td>18.70</td>\n",
       "      <td>18.61</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-03-10</td>\n",
       "      <td>8153</td>\n",
       "      <td>NaN</td>\n",
       "      <td>14.42</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-03-10</td>\n",
       "      <td>6680</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17.00</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-03-14</td>\n",
       "      <td>7284</td>\n",
       "      <td>16.64</td>\n",
       "      <td>16.49</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>196</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-04-24</td>\n",
       "      <td>14935</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.54</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>197</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-05-27</td>\n",
       "      <td>11338</td>\n",
       "      <td>8.98</td>\n",
       "      <td>8.78</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>198</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-05-30</td>\n",
       "      <td>11338</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.37</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2024-05-30</td>\n",
       "      <td>9002</td>\n",
       "      <td>11.25</td>\n",
       "      <td>11.20</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>200</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2024-06-04</td>\n",
       "      <td>9002</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10.98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>200 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     type  symbol       date  shares  limit_price  fill_price  fees\n",
       "id                                                                 \n",
       "1     buy  000001 2022-03-07    8153        15.32       14.92   0.0\n",
       "2     buy  000002 2022-03-07    6680        18.70       18.61   0.0\n",
       "3    sell  000001 2022-03-10    8153          NaN       14.42   0.0\n",
       "4    sell  000002 2022-03-10    6680          NaN       17.00   0.0\n",
       "5     buy  000002 2022-03-14    7284        16.64       16.49   0.0\n",
       "..    ...     ...        ...     ...          ...         ...   ...\n",
       "196  sell  000002 2024-04-24   14935          NaN        6.54   0.0\n",
       "197   buy  000002 2024-05-27   11338         8.98        8.78   0.0\n",
       "198  sell  000002 2024-05-30   11338          NaN        8.37   0.0\n",
       "199   buy  000001 2024-05-30    9002        11.25       11.20   0.0\n",
       "200  sell  000001 2024-06-04    9002          NaN       10.98   0.0\n",
       "\n",
       "[200 rows x 7 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result.orders"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>trade_count</td>\n",
       "      <td>1.000000e+02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>initial_market_value</td>\n",
       "      <td>5.000000e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>end_market_value</td>\n",
       "      <td>4.011197e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>total_pnl</td>\n",
       "      <td>-9.888030e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>unrealized_pnl</td>\n",
       "      <td>2.910383e-11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>total_return_pct</td>\n",
       "      <td>-1.977606e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>total_profit</td>\n",
       "      <td>6.961571e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>total_loss</td>\n",
       "      <td>-1.684960e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>total_fees</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>max_drawdown</td>\n",
       "      <td>-9.888030e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>max_drawdown_pct</td>\n",
       "      <td>-1.977606e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>win_rate</td>\n",
       "      <td>3.600000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>loss_rate</td>\n",
       "      <td>6.400000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>winning_trades</td>\n",
       "      <td>3.600000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>losing_trades</td>\n",
       "      <td>6.400000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>avg_pnl</td>\n",
       "      <td>-9.888030e+02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>avg_return_pct</td>\n",
       "      <td>-8.796000e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>avg_trade_bars</td>\n",
       "      <td>3.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>avg_profit</td>\n",
       "      <td>1.933770e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>avg_profit_pct</td>\n",
       "      <td>1.750556e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>avg_winning_trade_bars</td>\n",
       "      <td>3.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>avg_loss</td>\n",
       "      <td>-2.632750e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>avg_loss_pct</td>\n",
       "      <td>-2.359063e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>avg_losing_trade_bars</td>\n",
       "      <td>3.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>largest_win</td>\n",
       "      <td>8.191500e+03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>largest_win_pct</td>\n",
       "      <td>7.690000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>largest_win_bars</td>\n",
       "      <td>3.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>largest_loss</td>\n",
       "      <td>-1.097650e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>largest_loss_pct</td>\n",
       "      <td>-9.650000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>largest_loss_bars</td>\n",
       "      <td>3.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>max_wins</td>\n",
       "      <td>4.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>max_losses</td>\n",
       "      <td>7.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>sharpe</td>\n",
       "      <td>-1.092419e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>sortino</td>\n",
       "      <td>-1.073332e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>profit_factor</td>\n",
       "      <td>6.312933e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>ulcer_index</td>\n",
       "      <td>1.206998e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>upi</td>\n",
       "      <td>-3.270041e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>equity_r2</td>\n",
       "      <td>9.155231e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>std_error</td>\n",
       "      <td>2.176511e+04</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      name         value\n",
       "0              trade_count  1.000000e+02\n",
       "1     initial_market_value  5.000000e+05\n",
       "2         end_market_value  4.011197e+05\n",
       "3                total_pnl -9.888030e+04\n",
       "4           unrealized_pnl  2.910383e-11\n",
       "5         total_return_pct -1.977606e+01\n",
       "6             total_profit  6.961571e+04\n",
       "7               total_loss -1.684960e+05\n",
       "8               total_fees  0.000000e+00\n",
       "9             max_drawdown -9.888030e+04\n",
       "10        max_drawdown_pct -1.977606e+01\n",
       "11                win_rate  3.600000e+01\n",
       "12               loss_rate  6.400000e+01\n",
       "13          winning_trades  3.600000e+01\n",
       "14           losing_trades  6.400000e+01\n",
       "15                 avg_pnl -9.888030e+02\n",
       "16          avg_return_pct -8.796000e-01\n",
       "17          avg_trade_bars  3.000000e+00\n",
       "18              avg_profit  1.933770e+03\n",
       "19          avg_profit_pct  1.750556e+00\n",
       "20  avg_winning_trade_bars  3.000000e+00\n",
       "21                avg_loss -2.632750e+03\n",
       "22            avg_loss_pct -2.359063e+00\n",
       "23   avg_losing_trade_bars  3.000000e+00\n",
       "24             largest_win  8.191500e+03\n",
       "25         largest_win_pct  7.690000e+00\n",
       "26        largest_win_bars  3.000000e+00\n",
       "27            largest_loss -1.097650e+04\n",
       "28        largest_loss_pct -9.650000e+00\n",
       "29       largest_loss_bars  3.000000e+00\n",
       "30                max_wins  4.000000e+00\n",
       "31              max_losses  7.000000e+00\n",
       "32                  sharpe -1.092419e-01\n",
       "33                 sortino -1.073332e-01\n",
       "34           profit_factor  6.312933e-01\n",
       "35             ulcer_index  1.206998e+00\n",
       "36                     upi -3.270041e-02\n",
       "37               equity_r2  9.155231e-01\n",
       "38               std_error  2.176511e+04"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#result.metrics_df 包含一个使用回测收益率计算得出的指标 DataFrame。\n",
    "# https://www.pybroker.com/en/latest/reference/pybroker.eval.html#pybroker.eval.EvalMetrics\n",
    "result.metrics_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 筛选回测数据\n",
    "你可以筛选用于回测的数据，仅包括特定的 K 线。例如，你可以通过筛选仅包含周一的数据来限制策略仅在周一交易：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Backtesting: 2022-03-01 00:00:00 to 2024-06-05 00:00:00\n",
      "\n",
      "Loading bar data...\n",
      "Loaded bar data: 0:00:00 \n",
      "\n",
      "Test split: 2022-03-07 00:00:00 to 2024-06-03 00:00:00\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\ProgramData\\Anaconda3\\envs\\pybroker\\Lib\\site-packages\\pybroker\\data.py:244: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.\n",
      "  df = pd.concat((cached_df, df))\n",
      "  0% (0 of 108) |                        | Elapsed Time: 0:00:00 ETA:  --:--:--\n",
      " 10% (11 of 108) |##                     | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 37% (41 of 108) |########               | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 47% (51 of 108) |##########             | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 56% (61 of 108) |############           | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 65% (71 of 108) |###############        | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 84% (91 of 108) |###################    | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      " 93% (101 of 108) |####################  | Elapsed Time: 0:00:00 ETA:   0:00:00\n",
      "100% (108 of 108) |######################| Elapsed Time: 0:00:00 Time:  0:00:00\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Finished backtest: 0:00:01\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>type</th>\n",
       "      <th>symbol</th>\n",
       "      <th>date</th>\n",
       "      <th>shares</th>\n",
       "      <th>limit_price</th>\n",
       "      <th>fill_price</th>\n",
       "      <th>fees</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-05-09</td>\n",
       "      <td>8417</td>\n",
       "      <td>14.84</td>\n",
       "      <td>14.70</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-05-09</td>\n",
       "      <td>6638</td>\n",
       "      <td>18.82</td>\n",
       "      <td>18.58</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-05-30</td>\n",
       "      <td>8417</td>\n",
       "      <td>NaN</td>\n",
       "      <td>14.16</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-05-30</td>\n",
       "      <td>6638</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17.99</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-06-06</td>\n",
       "      <td>8727</td>\n",
       "      <td>14.07</td>\n",
       "      <td>13.90</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-06-06</td>\n",
       "      <td>6895</td>\n",
       "      <td>17.81</td>\n",
       "      <td>17.34</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-06-27</td>\n",
       "      <td>8727</td>\n",
       "      <td>NaN</td>\n",
       "      <td>14.39</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-06-27</td>\n",
       "      <td>6895</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.47</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-07-18</td>\n",
       "      <td>8706</td>\n",
       "      <td>14.45</td>\n",
       "      <td>13.32</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-07-18</td>\n",
       "      <td>6633</td>\n",
       "      <td>18.97</td>\n",
       "      <td>17.73</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-08-08</td>\n",
       "      <td>8706</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12.26</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-08-08</td>\n",
       "      <td>6633</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.50</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-10-10</td>\n",
       "      <td>10129</td>\n",
       "      <td>11.99</td>\n",
       "      <td>11.62</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-10-24</td>\n",
       "      <td>7301</td>\n",
       "      <td>16.59</td>\n",
       "      <td>15.76</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-10-31</td>\n",
       "      <td>10129</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10.34</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-11-14</td>\n",
       "      <td>7301</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.42</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2022-12-26</td>\n",
       "      <td>9165</td>\n",
       "      <td>13.03</td>\n",
       "      <td>12.88</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2022-12-26</td>\n",
       "      <td>6176</td>\n",
       "      <td>19.34</td>\n",
       "      <td>18.48</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-01-30</td>\n",
       "      <td>9165</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.32</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-01-30</td>\n",
       "      <td>6176</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.50</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-02-06</td>\n",
       "      <td>6917</td>\n",
       "      <td>18.08</td>\n",
       "      <td>17.48</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-02-13</td>\n",
       "      <td>8913</td>\n",
       "      <td>13.99</td>\n",
       "      <td>13.77</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-02-27</td>\n",
       "      <td>6917</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17.28</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-03-06</td>\n",
       "      <td>8913</td>\n",
       "      <td>NaN</td>\n",
       "      <td>14.01</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-03-13</td>\n",
       "      <td>7618</td>\n",
       "      <td>16.44</td>\n",
       "      <td>15.86</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-03-20</td>\n",
       "      <td>9600</td>\n",
       "      <td>13.04</td>\n",
       "      <td>12.70</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-04-03</td>\n",
       "      <td>7618</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.35</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-04-10</td>\n",
       "      <td>9600</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12.64</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-05-22</td>\n",
       "      <td>9681</td>\n",
       "      <td>12.82</td>\n",
       "      <td>12.38</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-05-22</td>\n",
       "      <td>8247</td>\n",
       "      <td>15.05</td>\n",
       "      <td>14.55</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-06-12</td>\n",
       "      <td>9681</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11.83</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-06-12</td>\n",
       "      <td>8247</td>\n",
       "      <td>NaN</td>\n",
       "      <td>14.58</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-06-19</td>\n",
       "      <td>10427</td>\n",
       "      <td>11.78</td>\n",
       "      <td>11.52</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-06-26</td>\n",
       "      <td>8651</td>\n",
       "      <td>14.18</td>\n",
       "      <td>13.80</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-07-10</td>\n",
       "      <td>10427</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11.22</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-07-17</td>\n",
       "      <td>8651</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13.70</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-08-14</td>\n",
       "      <td>10028</td>\n",
       "      <td>12.15</td>\n",
       "      <td>11.68</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-08-14</td>\n",
       "      <td>8278</td>\n",
       "      <td>14.72</td>\n",
       "      <td>14.27</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-09-04</td>\n",
       "      <td>10028</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11.46</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-09-04</td>\n",
       "      <td>8278</td>\n",
       "      <td>NaN</td>\n",
       "      <td>14.16</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-09-18</td>\n",
       "      <td>8844</td>\n",
       "      <td>13.69</td>\n",
       "      <td>13.35</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-10-16</td>\n",
       "      <td>8844</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12.38</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-10-16</td>\n",
       "      <td>10814</td>\n",
       "      <td>11.10</td>\n",
       "      <td>10.99</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-10-23</td>\n",
       "      <td>9752</td>\n",
       "      <td>12.20</td>\n",
       "      <td>11.65</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-11-06</td>\n",
       "      <td>10814</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10.60</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-11-13</td>\n",
       "      <td>9752</td>\n",
       "      <td>NaN</td>\n",
       "      <td>11.74</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-11-20</td>\n",
       "      <td>11530</td>\n",
       "      <td>10.24</td>\n",
       "      <td>10.16</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-12-11</td>\n",
       "      <td>11530</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9.26</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2023-12-11</td>\n",
       "      <td>10434</td>\n",
       "      <td>11.17</td>\n",
       "      <td>10.56</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2023-12-18</td>\n",
       "      <td>12382</td>\n",
       "      <td>9.34</td>\n",
       "      <td>9.16</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-01-08</td>\n",
       "      <td>10434</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9.96</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2024-01-15</td>\n",
       "      <td>12382</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9.21</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-01-15</td>\n",
       "      <td>11608</td>\n",
       "      <td>9.81</td>\n",
       "      <td>9.61</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-02-05</td>\n",
       "      <td>11608</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9.24</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-03-11</td>\n",
       "      <td>11994</td>\n",
       "      <td>9.42</td>\n",
       "      <td>9.35</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-04-01</td>\n",
       "      <td>11994</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9.02</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>buy</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-04-08</td>\n",
       "      <td>12485</td>\n",
       "      <td>8.97</td>\n",
       "      <td>8.04</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>buy</td>\n",
       "      <td>000001</td>\n",
       "      <td>2024-04-15</td>\n",
       "      <td>10737</td>\n",
       "      <td>10.42</td>\n",
       "      <td>10.19</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>sell</td>\n",
       "      <td>000002</td>\n",
       "      <td>2024-04-29</td>\n",
       "      <td>12485</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.16</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>sell</td>\n",
       "      <td>000001</td>\n",
       "      <td>2024-05-06</td>\n",
       "      <td>10737</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10.98</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    type  symbol       date  shares  limit_price  fill_price  fees\n",
       "id                                                                \n",
       "1    buy  000001 2022-05-09    8417        14.84       14.70   0.0\n",
       "2    buy  000002 2022-05-09    6638        18.82       18.58   0.0\n",
       "3   sell  000001 2022-05-30    8417          NaN       14.16   0.0\n",
       "4   sell  000002 2022-05-30    6638          NaN       17.99   0.0\n",
       "5    buy  000001 2022-06-06    8727        14.07       13.90   0.0\n",
       "6    buy  000002 2022-06-06    6895        17.81       17.34   0.0\n",
       "7   sell  000001 2022-06-27    8727          NaN       14.39   0.0\n",
       "8   sell  000002 2022-06-27    6895          NaN       18.47   0.0\n",
       "9    buy  000001 2022-07-18    8706        14.45       13.32   0.0\n",
       "10   buy  000002 2022-07-18    6633        18.97       17.73   0.0\n",
       "11  sell  000001 2022-08-08    8706          NaN       12.26   0.0\n",
       "12  sell  000002 2022-08-08    6633          NaN       16.50   0.0\n",
       "13   buy  000001 2022-10-10   10129        11.99       11.62   0.0\n",
       "14   buy  000002 2022-10-24    7301        16.59       15.76   0.0\n",
       "15  sell  000001 2022-10-31   10129          NaN       10.34   0.0\n",
       "16  sell  000002 2022-11-14    7301          NaN       16.42   0.0\n",
       "17   buy  000001 2022-12-26    9165        13.03       12.88   0.0\n",
       "18   buy  000002 2022-12-26    6176        19.34       18.48   0.0\n",
       "19  sell  000001 2023-01-30    9165          NaN       15.32   0.0\n",
       "20  sell  000002 2023-01-30    6176          NaN       18.50   0.0\n",
       "21   buy  000002 2023-02-06    6917        18.08       17.48   0.0\n",
       "22   buy  000001 2023-02-13    8913        13.99       13.77   0.0\n",
       "23  sell  000002 2023-02-27    6917          NaN       17.28   0.0\n",
       "24  sell  000001 2023-03-06    8913          NaN       14.01   0.0\n",
       "25   buy  000002 2023-03-13    7618        16.44       15.86   0.0\n",
       "26   buy  000001 2023-03-20    9600        13.04       12.70   0.0\n",
       "27  sell  000002 2023-04-03    7618          NaN       15.35   0.0\n",
       "28  sell  000001 2023-04-10    9600          NaN       12.64   0.0\n",
       "29   buy  000001 2023-05-22    9681        12.82       12.38   0.0\n",
       "30   buy  000002 2023-05-22    8247        15.05       14.55   0.0\n",
       "31  sell  000001 2023-06-12    9681          NaN       11.83   0.0\n",
       "32  sell  000002 2023-06-12    8247          NaN       14.58   0.0\n",
       "33   buy  000001 2023-06-19   10427        11.78       11.52   0.0\n",
       "34   buy  000002 2023-06-26    8651        14.18       13.80   0.0\n",
       "35  sell  000001 2023-07-10   10427          NaN       11.22   0.0\n",
       "36  sell  000002 2023-07-17    8651          NaN       13.70   0.0\n",
       "37   buy  000001 2023-08-14   10028        12.15       11.68   0.0\n",
       "38   buy  000002 2023-08-14    8278        14.72       14.27   0.0\n",
       "39  sell  000001 2023-09-04   10028          NaN       11.46   0.0\n",
       "40  sell  000002 2023-09-04    8278          NaN       14.16   0.0\n",
       "41   buy  000002 2023-09-18    8844        13.69       13.35   0.0\n",
       "42  sell  000002 2023-10-16    8844          NaN       12.38   0.0\n",
       "43   buy  000001 2023-10-16   10814        11.10       10.99   0.0\n",
       "44   buy  000002 2023-10-23    9752        12.20       11.65   0.0\n",
       "45  sell  000001 2023-11-06   10814          NaN       10.60   0.0\n",
       "46  sell  000002 2023-11-13    9752          NaN       11.74   0.0\n",
       "47   buy  000001 2023-11-20   11530        10.24       10.16   0.0\n",
       "48  sell  000001 2023-12-11   11530          NaN        9.26   0.0\n",
       "49   buy  000002 2023-12-11   10434        11.17       10.56   0.0\n",
       "50   buy  000001 2023-12-18   12382         9.34        9.16   0.0\n",
       "51  sell  000002 2024-01-08   10434          NaN        9.96   0.0\n",
       "52  sell  000001 2024-01-15   12382          NaN        9.21   0.0\n",
       "53   buy  000002 2024-01-15   11608         9.81        9.61   0.0\n",
       "54  sell  000002 2024-02-05   11608          NaN        9.24   0.0\n",
       "55   buy  000002 2024-03-11   11994         9.42        9.35   0.0\n",
       "56  sell  000002 2024-04-01   11994          NaN        9.02   0.0\n",
       "57   buy  000002 2024-04-08   12485         8.97        8.04   0.0\n",
       "58   buy  000001 2024-04-15   10737        10.42       10.19   0.0\n",
       "59  sell  000002 2024-04-29   12485          NaN        7.16   0.0\n",
       "60  sell  000001 2024-05-06   10737          NaN       10.98   0.0"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = strategy.backtest(days='mon')\n",
    "result.orders"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
